import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';

/**
 * 创建一个Axios实例并配置基础URL
 * 所有通过这个实例发出的请求都会自动添加 '/api' 前缀
 */
const api: AxiosInstance = axios.create({
    baseURL: '/api',
});

/**
 * 请求拦截器配置
 * 在每个请求发送之前执行，用于添加认证信息
 */
api.interceptors.request.use(
    (config: AxiosRequestConfig) => {
        // 从本地存储获取认证令牌
        const token = localStorage.getItem('token');
        // 如果令牌存在，则在请求头中添加Authorization字段
        if (token) {
            config.headers = {
                ...config.headers,
                Authorization: `Bearer ${token}`,
            };
        }
        return config;
    },
    (error) => {
        // 处理请求错误，直接拒绝Promise
        return Promise.reject(error);
    }
);

/**
 * 响应拦截器配置
 * 在每个响应返回之后执行，用于全局错误处理
 */
api.interceptors.response.use(
    (response: AxiosResponse) => response, // 成功响应直接返回
    (error: AxiosError) => {
        // 处理未授权错误（401状态码）
        if (error.response?.status === 401) {
            // 移除无效令牌
            localStorage.removeItem('token');
            // 重定向到登录页面
            window.location.href = '/login';
        }
        // 继续传递错误，让具体的请求处理函数可以捕获
        return Promise.reject(error);
    }
);

export default api; // 导出配置好的Axios实例供应用使用